package cn.yunbamboos.mybatis.metadata;

import java.io.Serializable;
import java.util.List;

/**
 * 分页 Page 对象接口
 */
public interface IPage<T> extends Serializable {

    /**
     * 计算当前分页偏移量
     */
    default int offset() {
        int current = getCurrent();
        if (current <= 1) {
            return 0;
        }
        return Math.max((current - 1) * getSize(), 0);
    }

    /**
     * 当前分页总页数
     */
    default int getPages() {
        if (getSize() == 0) {
            return 0;
        }
        int pages = getTotal() / getSize();
        if (getTotal() % getSize() != 0) {
            pages++;
        }
        return pages;
    }

    /**
     * 分页记录列表
     *
     * @return 分页对象记录列表
     */
    List<T> getRows();

    /**
     * 设置分页记录列表
     */
    IPage<T> setRows(List<T> rows);

    /**
     * 当前满足条件总行数
     *
     * @return 总条数
     */
    int getTotal();

    /**
     * 设置当前满足条件总行数
     */
    IPage<T> setTotal(int totalNum);

    /**
     * 获取每页显示条数
     *
     * @return 每页显示条数
     */
    int getSize();

    /**
     * 当前页
     *
     * @return 当前页
     */
    int getCurrent();

    int getOffset();


}
